package com.ymx.darling.bean.entity;

import com.ymx.darling.bean.annotation.Entity;

/**
 * 实体解析器
 * 解析器只会解析处理被{@code @Entity}标注的实体类型
 * @author 爱Java的小于
 */
public interface BeanInfoRepository {
    /**
     * 解析实体类的实例并返回解析后的信息
     * @param entity 待解析的 实体的Class
     */
    void register(Class<?> entity);

    /**
     * 判断指定表的实体是否存在
     * @param tableName 根据表名查找
     * @return boolean
     */
    boolean hasTable(String tableName);

    /**
     * 根据实体类型返回对应的BeanInfo 如果没有则报错
     * @param entity 被{@code @Entity}注解的实体类型
     * @return BeanInfo
     */
    BeanInfo getBeanInfo(Class<?> entity);

    /**
     * 根据表名返回对应的BeanInfo实例
     * @param tableName 表名
     * @return BeanInfo 不存在则返回null
     */
    BeanInfo getTableBeanInfo(String tableName);


    /**
     * 判断指定实体类是否被{@code @Entity}注解
     * @param entityClass 实体类
     * @return boolean
     */
    default boolean isScannerForEntity(Class<?> entityClass) {
        return entityClass != null && entityClass.isAnnotationPresent(Entity.class);
    }
}
